//
//  XGTabBar.swift
//  WeIBo
//
//  Created by 苏文潇 on 2017/3/4.
//  Copyright © 2017年 苏文潇. All rights reserved.
//

import UIKit

//代理
protocol XGTabBarDelegate: NSObjectProtocol {
    func didSeletedButton()
}


class XGTabBar: UITabBar {

//    MARK: 定义闭包进行回调
    var callBack: (()->())?
    
//    MARK:定义代理对象（注意是若引用，需要使用weak进行修饰）
    weak var xgDelegate: XGTabBarDelegate?
    
    
//    MARK:懒加载控件
    lazy private var button: UIButton = {
        
        let button = UIButton()
        
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), for: .normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), for: .highlighted)
        
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), for: .normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), for: .highlighted)
        
//        添加点击事件
        button.addTarget(self, action: #selector(btnClick), for: .touchUpInside)
//        大小
        button.sizeToFit()
        
        return button
    }()
    
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        setUI()
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
//    MARK:创建视图
    func setUI()
    {
        addSubview(self.button)
    }
    
    
    
//    MARK:中心按钮的点击事件
//    这样做的目的是这个方法只是在内部进行实现的，外界不能调用它，如果不添加@objc private，外部就可以随意调用这个方法，会乱套的。哪些方法该私有，哪些方法该暴露需要细心考虑。以防最后出现重大bug。
    
//  使用private 修饰的事件函数在swift的运行循环里面是找不到, 因为swift是编译型语言,编译的是就需要知道执行那个函数,为了追求性能
//  我们需要使用@objc  , 告诉编译器我们使用oc的方式去调用这个方法, oc是基于运行时,使用kvc方式动态派发
    @objc private func btnClick()
    {
        print("点击加号按钮")
//        闭包实现回调
        callBack?()
        
//        代理方法实现回调
        self.xgDelegate?.didSeletedButton()
    }
    
//   MARK: 调整子控件布局
    override func layoutSubviews() {
        
//        一定要调用父类的方法，否则会闯祸的
        super.layoutSubviews()
        
        button.center.x = width / 2
        button.center.y = height / 2
        
        
        let buttonWidth = width / 5
        
        var index = 0
        
        for childView in subviews
        {
//            通过遍历子控件，可以拿到所需控件的类型： UITabBarButton
//            print(childView)
            if childView.isKind(of: NSClassFromString("UITabBarButton")!){
//                print(childView)
                
                childView.frame.size.width = buttonWidth
                childView.frame.origin.x = CGFloat(index) * buttonWidth
                
                index += 1
                
                if index == 2
                {
                    index += 1
                }
            }
        }
        
    }
    
}
